package educar.gui;

import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JFileChooser;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.JList;
import javax.swing.JLayeredPane;
import javax.swing.JTextField;

import java.awt.Color;
import javax.swing.ListSelectionModel;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;

import educar.controllers.AlumnoController;

public class AlumnoView extends JFrame implements IView
{

    private static final long serialVersionUID = 1L;

    public static final String INSCRIBIRSE  = "Inscribirse";
    public static final String EXAMINAR     = "Examinar...";
    public static final String ENVIAR       = "Enviar";

    private JPanel contentPane;

    GenericListener listener;
    AlumnoController c;

    private JTextField actividadesExaminarField;
    private JLabel materiasCodigoALabel;
    private JLabel materiasNombreALabel;
    private JLabel materiasProfesorALabel;
    private JLabel actividadesMateriaALabel;
    private JLabel actividadesCodigoALabel;
    private JLabel actividadesDescripcionALabel;
    private JLabel actividadesFechaEnvioALabel;
    private JLabel actividadesCodigoResALabel;
    private JLabel actividadesNotaALabel;
    private JLabel actividadesProfesorALabel;
    private JLabel datosPersonalesActualDniLabel;
    private JLabel datosPersonalesActualNombreLabel;
    private JLabel datosPersonalesActualNroAlumnoLabel;
    private JLabel datosPersonalesActualApellidoLabel;

    JList materiasAuxiliaresList;
    JList materiasParaInscribirseList;
    JList materiasInscriptoYaList;
    JList actividadesList;


    public void present(String model)
    {
        JOptionPane.showMessageDialog(null, model);
    }

    /**
     * Create the frame.
     */
    public AlumnoView()
    {
        listener = new GenericListener();
        c = new AlumnoController();

        this.setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 971, 600);


        setMenu();

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTabbedPane educarPane = new JTabbedPane(JTabbedPane.TOP);
        educarPane.setBounds(5, 5, 960, 590);
        contentPane.add(educarPane);

        setPestanaDatosPersonales(educarPane);
        setPestanaMateria(educarPane);
        setPestanaActividades(educarPane);


        c.setView(this);
    }

    public void setMenu()
    {
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu educarMenu = new JMenu("Educar");
        menuBar.add(educarMenu);

        JMenuItem salirMenuItem = new JMenuItem("Salir");
        educarMenu.add(salirMenuItem);
        salirMenuItem.addActionListener(
            new ActionListener()
        {
            public void actionPerformed(ActionEvent evento)
            {
                System.exit(0);
            }
        });
    }

    public void setPestanaDatosPersonales(JTabbedPane educarPane)
    {
        //pestana datosPersonales
        JLayeredPane datosPersonalesPestana = new JLayeredPane();
        educarPane.addTab("Datos Personales", null, datosPersonalesPestana, null);

        datosPersonalesPestana.setLayout(null);

        JLayeredPane datosPersonalesPane = new JLayeredPane();
        datosPersonalesPane.setBackground(Color.GRAY);
        datosPersonalesPane.setBounds(118, 12, 653, 443);
        datosPersonalesPestana.add(datosPersonalesPane);

        JLabel datosPersonalesDniLabel = new JLabel("DNI:");
        datosPersonalesDniLabel.setBounds(148, 159, 70, 15);
        datosPersonalesPane.add(datosPersonalesDniLabel);

        JLabel datosPersonalesNombreLabel = new JLabel("Nombre:");
        datosPersonalesNombreLabel.setBounds(148, 186, 70, 15);
        datosPersonalesPane.add(datosPersonalesNombreLabel);

        JLabel datosPersonalesApellidoLabel = new JLabel("Apellido:");
        datosPersonalesApellidoLabel.setBounds(148, 213, 70, 15);
        datosPersonalesPane.add(datosPersonalesApellidoLabel);

        JLabel datosPersonalesNroAlumnoLabel = new JLabel("N° Alumno:");
        datosPersonalesNroAlumnoLabel.setBounds(148, 240, 80, 15);
        datosPersonalesPane.add(datosPersonalesNroAlumnoLabel);

        datosPersonalesActualDniLabel = new JLabel();
        datosPersonalesActualDniLabel.setBounds(230, 159, 120, 15);
        datosPersonalesPane.add(datosPersonalesActualDniLabel);

        datosPersonalesActualNombreLabel = new JLabel();
        datosPersonalesActualNombreLabel.setBounds(230, 186, 214, 15);
        datosPersonalesPane.add(datosPersonalesActualNombreLabel);

        datosPersonalesActualApellidoLabel = new JLabel();
        datosPersonalesActualApellidoLabel.setBounds(230, 213, 214, 15);
        datosPersonalesPane.add(datosPersonalesActualApellidoLabel);

        datosPersonalesActualNroAlumnoLabel = new JLabel();
        datosPersonalesActualNroAlumnoLabel.setBounds(229, 240, 80, 15);
        datosPersonalesPane.add(datosPersonalesActualNroAlumnoLabel);
    }

    public void setPestanaMateria(JTabbedPane educarPane)
    {
        JLayeredPane materiaPestana = new JLayeredPane();
        educarPane.addTab("Materias", null, materiaPestana, null);


        JLayeredPane materiasPane = new JLayeredPane();
        materiasPane.setBounds(220, 12, 490, 443);
        materiaPestana.add(materiasPane);
        materiasPane.setBackground(Color.GRAY);

        JLabel materiasCodigoLabel = new JLabel("Codigo:");
        materiasCodigoLabel.setBounds(88, 138, 70, 15);
        materiasPane.add(materiasCodigoLabel);

        materiasCodigoALabel = new JLabel();
        materiasCodigoALabel.setBounds(200, 136, 192, 19);
        materiasPane.add(materiasCodigoALabel);

        materiasNombreALabel = new JLabel();
        materiasNombreALabel.setBounds(200, 166, 192, 19);
        materiasPane.add(materiasNombreALabel);

        JLabel materiasNombreLabel = new JLabel("Nombre:");
        materiasNombreLabel.setBounds(88, 168, 70, 15);
        materiasPane.add(materiasNombreLabel);

        materiasProfesorALabel = new JLabel();
        materiasProfesorALabel.setBounds(200, 196, 185, 19);
        materiasPane.add(materiasProfesorALabel);

        JLabel materiasProfesorLabel = new JLabel("Profesor:");
        materiasProfesorLabel.setBounds(88, 198, 70, 15);
        materiasPane.add(materiasProfesorLabel);

        JButton materiasInscribirseButton = new JButton(INSCRIBIRSE);
        materiasInscribirseButton.setBounds(253, 392, 140, 25);
        materiasPane.add(materiasInscribirseButton);

        materiasAuxiliaresList = new JList();
        materiasAuxiliaresList.setBackground(UIManager.getColor("info"));
        materiasAuxiliaresList.setBounds(200, 234, 185, 130);
        materiasPane.add(materiasAuxiliaresList);

        JLabel materiasAuxiliaresLabel = new JLabel("Auxiliares:");
        materiasAuxiliaresLabel.setBounds(88, 228, 80, 15);
        materiasPane.add(materiasAuxiliaresLabel);

        JScrollPane materiasParaInscribirseScrollPane = new JScrollPane();
        materiasParaInscribirseScrollPane.setBounds(12, 42, 200, 443);
        materiaPestana.add(materiasParaInscribirseScrollPane);
        materiasParaInscribirseList = new JList();
        materiasParaInscribirseScrollPane.setViewportView(materiasParaInscribirseList);
        materiasParaInscribirseList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        materiasParaInscribirseList.setBackground(Color.WHITE);
        materiasParaInscribirseList.setName("materiasParaInscribirseList");


        JScrollPane materiasInscriptoYaScrollPane = new JScrollPane();
        materiasInscriptoYaScrollPane.setBounds(712, 42, 200, 443);
        materiaPestana.add(materiasInscriptoYaScrollPane);
        materiasInscriptoYaList = new JList();
        materiasInscriptoYaScrollPane.setViewportView(materiasInscriptoYaList);
        materiasInscriptoYaList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        materiasInscriptoYaList.setBackground(Color.WHITE);
        materiasInscriptoYaList.setName("materiasInscriptoYaList");

        JLabel materiasParaInscribirseLabel = new JLabel("Para inscribirse");
        materiasParaInscribirseLabel.setBounds(12, 12, 135, 15);
        materiaPestana.add(materiasParaInscribirseLabel);

        JLabel materiasInscriptoYaLabel = new JLabel("Inscripto ya");
        materiasInscriptoYaLabel.setBounds(712, 12, 135, 15);
        materiaPestana.add(materiasInscriptoYaLabel);

        listener.associate(materiasInscribirseButton, c);
        listener.associate(materiasAuxiliaresList, c);
        listener.associate(materiasParaInscribirseList, c);
        listener.associate(materiasInscriptoYaList, c);
    }


    public void setPestanaActividades(JTabbedPane educarPane)
    {
        //pestana actividades
        JLayeredPane actividadesPestana = new JLayeredPane();
        educarPane.addTab("Actividades", null, actividadesPestana, null);

        JLayeredPane actividadesPane = new JLayeredPane();
        actividadesPane.setBackground(Color.GRAY);
        actividadesPane.setBounds(224, 12, 653, 443);
        actividadesPestana.add(actividadesPane);

        JLabel actividadesNombreLabel = new JLabel("Materia:");
        actividadesNombreLabel.setBounds(12, 100, 70, 15);
        actividadesPane.add(actividadesNombreLabel);

        actividadesMateriaALabel = new JLabel();
        actividadesMateriaALabel.setBounds(83, 98, 191, 19);
        actividadesPane.add(actividadesMateriaALabel);

        JButton actividadesEnviarButton = new JButton(ENVIAR);
        actividadesEnviarButton.setBounds(408, 269, 102, 25);
        actividadesPane.add(actividadesEnviarButton);

        JButton actividadesExaminarButton = new JButton(EXAMINAR);
        actividadesExaminarButton.setBounds(31, 269, 113, 25);
        actividadesPane.add(actividadesExaminarButton);
        actividadesExaminarButton.addActionListener(
            new ActionListener()
        {
            public void actionPerformed(ActionEvent evento)
            {
                JFileChooser fc = new JFileChooser();
                fc.showOpenDialog(null);
                if (fc.getSelectedFile().toString() != null)
                    setAExaminarRuta(fc.getSelectedFile().toString());
            }
        });

        JLabel actividadesCodigoLabel = new JLabel("Codigo de actividad:");
        actividadesCodigoLabel.setBounds(12, 127, 147, 15);
        actividadesPane.add(actividadesCodigoLabel);

        actividadesCodigoALabel = new JLabel("");
        actividadesCodigoALabel.setBounds(160, 125, 102, 19);
        actividadesPane.add(actividadesCodigoALabel);

        JLabel actividadesDescripcionLabel = new JLabel("Descripcion:");
        actividadesDescripcionLabel.setBounds(12, 154, 90, 15);
        actividadesPane.add(actividadesDescripcionLabel);

        actividadesDescripcionALabel = new JLabel();
        actividadesDescripcionALabel.setBounds(112, 152, 270, 19);
        actividadesPane.add(actividadesDescripcionALabel);

        JLabel actividadesResolucionLabel = new JLabel("Resolucion:");
        actividadesResolucionLabel.setBounds(12, 220, 82, 15);
        actividadesPane.add(actividadesResolucionLabel);

        actividadesExaminarField = new JTextField();
        actividadesExaminarField.setColumns(10);
        actividadesExaminarField.setBounds(156, 272, 228, 19);
        actividadesPane.add(actividadesExaminarField);

        JLabel actividadesFechaEnvioLabel = new JLabel("Fecha de envío:");
        actividadesFechaEnvioLabel.setBounds(31, 324, 113, 15);
        actividadesPane.add(actividadesFechaEnvioLabel);

        JLabel actividadesCodigoResLabel = new JLabel("Codigo de resolucion:");
        actividadesCodigoResLabel.setBounds(31, 368, 160, 15);
        actividadesPane.add(actividadesCodigoResLabel);

        actividadesFechaEnvioALabel = new JLabel();
        actividadesFechaEnvioALabel.setBounds(160, 322, 239, 19);
        actividadesPane.add(actividadesFechaEnvioALabel);

        actividadesCodigoResALabel = new JLabel();
        actividadesCodigoResALabel.setBounds(203, 368, 70, 19);
        actividadesPane.add(actividadesCodigoResALabel);

        JLabel actividadesProfesorLabel = new JLabel("Profesor:");
        actividadesProfesorLabel.setBounds(31, 395, 70, 19);
        actividadesPane.add(actividadesProfesorLabel);

        actividadesProfesorALabel = new JLabel();
        actividadesProfesorALabel.setBounds(110, 395, 249, 19);
        actividadesPane.add(actividadesProfesorALabel);

        JLabel actividadesNotaLabel = new JLabel("NOTA:");
        actividadesNotaLabel.setBounds(160, 429, 45, 15);
        actividadesPane.add(actividadesNotaLabel);

        actividadesNotaALabel = new JLabel();
        actividadesNotaALabel.setBounds(211, 429, 132, 19);
        actividadesPane.add(actividadesNotaALabel);

        JScrollPane actividadesScrollPane = new JScrollPane();
        actividadesScrollPane.setBounds(12, 12, 200, 443);
        actividadesPestana.add(actividadesScrollPane);

        actividadesList = new JList();
        actividadesScrollPane.setViewportView(actividadesList);
        actividadesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        actividadesList.setBackground(Color.WHITE);;
        actividadesList.setName("actividadesList");

        listener.associate(actividadesExaminarButton, c);
        listener.associate(actividadesEnviarButton, c);
        listener.associate(actividadesList, c);


    }


    //set arrays

    public void setMAuxiliares(String[] a)
    {
        materiasAuxiliaresList.setListData(a);
    }

    public void setMateriasParaInscribirse(String[] a)
    {
        materiasParaInscribirseList.setListData(a);
    }

    public void setMateriasInscriptoYa(String[] a)
    {
        materiasInscriptoYaList.setListData(a);
    }

    public void setActividadesList(String[] a)
    {
        actividadesList.setListData(a);
    }


    //set Datos Personales
    public void setDPDni(String dni)
    {
        datosPersonalesActualDniLabel.setText(dni);
    }

    public String getDPDni()
    {
        return datosPersonalesActualDniLabel.getText();
    }

    public void setDPNombre(String nombre)
    {
        datosPersonalesActualNombreLabel.setText(nombre);
    }

    public String getDPNombre()
    {
        return datosPersonalesActualNombreLabel.getText();
    }

    public void setDPNroAlumno(String nro)
    {
        datosPersonalesActualNroAlumnoLabel.setText(nro);
    }

    public String getDPNroAlumno()
    {
        return datosPersonalesActualNroAlumnoLabel.getText();
    }

    public void setDPApellido(String apellido)
    {
        datosPersonalesActualApellidoLabel.setText(apellido);
    }

    public String getDPApellido()
    {
        return datosPersonalesActualApellidoLabel.getText();
    }

    //set Materias
    public void setMCodigo(String dni)
    {
        materiasCodigoALabel.setText(dni);
    }

    public String getMCodigo()
    {
        return materiasCodigoALabel.getText();
    }

    public void setMNombre(String nombre)
    {
        materiasNombreALabel.setText(nombre);
    }

    public String getMNombre()
    {
        return materiasNombreALabel.getText();
    }

    public void setMProfesor(String profesor)
    {
        materiasProfesorALabel.setText(profesor);
    }

    public String getMProfesor()
    {
        return materiasProfesorALabel.getText();
    }

    //set Actividades
    public void setAMateria(String materia)
    {
        actividadesMateriaALabel.setText(materia);
    }

    public String getAMateria()
    {
        return actividadesMateriaALabel.getText();
    }

    public void setACodigo(String codigo)
    {
        actividadesCodigoALabel.setText(codigo);
    }

    public String getACodigo()
    {
        return actividadesCodigoALabel.getText();
    }

    public void setADescripcion(String desc)
    {
        actividadesDescripcionALabel.setText(desc);
    }

    public String getADescripcion()
    {
        return actividadesDescripcionALabel.getText();
    }

    public void setAFecha(String fecha)
    {
        actividadesFechaEnvioALabel.setText(fecha);
    }

    public String getAFecha()
    {
        return actividadesFechaEnvioALabel.getText();
    }


    public void setACodRes(String codigo)
    {
        actividadesCodigoResALabel.setText(codigo);
    }

    public String getACodRes()
    {
        return actividadesCodigoResALabel.getText();
    }

    public void setANota(String nota)
    {
        actividadesNotaALabel.setText(nota);
    }

    public String getANota()
    {
        return actividadesNotaALabel.getText();
    }

    public void setAProfesor(String profesor)
    {
        actividadesProfesorALabel.setText(profesor);
    }

    public String getAProfesor()
    {
        return actividadesProfesorALabel.getText();
    }

    public void setAExaminarRuta(String ruta)
    {
        actividadesExaminarField.setText(ruta);
    }

    public String getAExaminarRuta()
    {
        return actividadesExaminarField.getText();
    }

}